//axios的配置
import axios from "axios"
//引入ElementUI中的全局提示方法

import { MessageBox, Message } from "element-ui"

//引入进度条
import nprogress from "nprogress"
// console.log(ElementUI)
// console.log(MessageBox)

//对axios进行一些简单的配置
//axios的公共配置
let http = axios.create({
    withCredentials: true,//是否携带凭证
    baseURL: "/api",//基础地址
    timeout: 5000,//超时设置
})

//请求拦截
//假如有100个请求都需要携带相同的参数,在api接口中一个一个携带,重复,麻烦,拦截器可以拦截到每一个请求,然后进行添加参数,写一次就行
http.interceptors.request.use(config => {
    //开启进度条
    nprogress.start()
    //config就是请求的对象,里面可以拿到请求的地址 参数等
    //获取在localStorage中存储的token
    let token = localStorage.getItem('myx-token')
    config.headers.authorization = token
    //return config 理解为放行
    return config
})

//响应拦截
//可以在这个拦截器中处理一些公共的错误
http.interceptors.response.use(config => {
    //config是响应对象,里面可以拿到服务器响应的内容
    nprogress.done()
    //return config 就是放行
    // console.log("=====", config)
    //嵌套解构语法
    let { data: { state, msg, code } } = config;
    //10022 登入过期
    //1004 token过期
    //10026 没有权限
    let codes = ['10022', '1004', '10026']
    if (codes.includes(code)) {
        //清除token 
        localStorage.removeItem('myx-token')
        //刷新页面
        location.reload()
    }

    //一个需要排除掉不弹窗的接口

    let excludeUrl = ["/order/query_order_status"]

    //判断不需要弹窗的这个数组中是否包含当前的请求的这个路径
    let isExclude = excludeUrl.includes(config.config.url)

    //拦截器判断后端响应的state
    if (!state && !isExclude) {
        //全局提示
        MessageBox.alert(msg, '错误提示', { type: "error" })
    }
    return config
})

export default http;